package com.terry.imnetty.im;

import cn.hutool.core.lang.Console;
import com.terry.imnetty.bean.msg.ProtoMsg;
import com.terry.imnetty.constant.ProtoInstant;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;


/**
 * @author tanlvxu
 * @version 1.0
 * @information
 * @date 2021/10/29 16:05
 */
public class ProtobufEncoder extends MessageToByteEncoder<ProtoMsg.Message> {

    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, ProtoMsg.Message message, ByteBuf byteBuf) throws Exception {
        encode0(message, byteBuf);
    }


    public static void encode0(ProtoMsg.Message msg, ByteBuf out) {
        //写入魔数
        out.writeShort(ProtoInstant.MAGIC_CODE);
        //写入版本号
        out.writeShort(ProtoInstant.VERSION_CODE);

        byte[] bytes = msg.toByteArray();// 将对象转换为byte

        // 加密消息体
        /*ThreeDES des = channel.channel().attr(Constants.ENCRYPT).get();
        byte[] encryptByte = des.encrypt(bytes);*/
        int length = bytes.length;// 读取消息的长度

        Console.log("encoder length=" + length);

        // 先将消息长度写入，也就是消息头
        out.writeInt(length);
        // 消息体中包含我们要发送的数据
        out.writeBytes(bytes);

    }


}
